package main

import (
	"fmt"
)

type Cat struct {
	Name  string
	Age   int
	Color string
	Hobby string
	/* 指针类型 */
	Ptr *int
	// 切片
	Slice []int
	/* map */
	Map1 map[string]string
}

/*
*
看到第259页
*/
func main() {
	fmt.Println("====")

	/* 创建一个Cat变量 */
	var cat1 Cat
	cat1.Name = "Tom"
	cat1.Age = 3
	cat1.Color = "Blue"
	cat1.Hobby = "Play"
	/* 指针类型 */
	aInt := 100
	cat1.Ptr = &aInt
	/* 初始化切片 */
	cat1.Slice = make([]int, 10)
	cat1.Slice[0] = 1
	cat1.Slice[1] = 2
	/* map */
	cat1.Map1 = make(map[string]string)
	cat1.Map1["name"] = "Tom"

	fmt.Println("==cat1==", cat1)
	fmt.Println("==猫的信息如下==")
	fmt.Printf("猫的名字是：%s\n", cat1.Name)
	fmt.Printf("猫的年龄是：%d\n", cat1.Age)
	fmt.Printf("猫的颜色是：%s\n", cat1.Color)
	fmt.Printf("猫的爱好是：%s\n", cat1.Hobby)
	fmt.Println("==指针==", cat1.Ptr)
	fmt.Println("==切片==", cat1.Slice)
	fmt.Println("==map==", cat1.Map1)
	fmt.Println("==猫的信息结束==")

	/* 第二个对象 */
	cat2 := Cat{
		Name: "小花",
	}
	fmt.Println("==cat2==", cat2)

	/* 第三个对象 */
	var cat3 *Cat = new(Cat)
	cat3.Name = "小白"
	cat3.Age = 2
	/* 指针 */
	(*cat3).Name = "小黑" // 也可以这样写
	fmt.Println("==cat3==", cat3)

	/* 第四个对象 */
	cat4 := &Cat{
		Name: "小黄",
		Age:  1,
	}
	fmt.Println("==cat4==", cat4)
	fmt.Println("==cat4Name==", cat4.Name)

	cat5 := &cat2
	fmt.Println("==cat5==", cat5)
	fmt.Println("==cat5Name==", cat5.Name)
	cat5.Name = "小花花" // 修改cat2的名字;
	fmt.Println("==cat2==", cat2)
	fmt.Println("==cat2Name==", cat2.Name)

	fmt.Printf("==cat5地址:%p==\n", &cat2)
	fmt.Printf("==cat2地址:%p,cat2的值为:%p==", &cat5, cat5)
}
